/**
 * Copyright (c) 2020 Coder League
 * All rights reserved.
 *
 * File：FunctionController.java
 * History:
 *         2020年12月20日: Initially created, Chrise.
 */
package club.coderleague.cfss.controller.function;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import club.coderleague.cfss.annotations.PassiveRequest;
import club.coderleague.cfss.annotations.Request;
import club.coderleague.cfss.controller.IndexController;
import club.coderleague.cfss.domain.entities.Functions;
import club.coderleague.cfss.domain.enums.EntityState;
import club.coderleague.cfss.service.function.FunctionService;

/**
 * 功能控制器。
 * @author Chrise
 */
@Controller
@RequestMapping(IndexController.REQUEST_PREFIX + "/funcmgr")
public class FunctionController extends IndexController {
	@Autowired
	private FunctionService functionService;
	
	/**
	 * 跳转至功能管理页面。
	 * @author Chrise 2020年12月20日
	 * @return 页面路径。
	 */
	@RequestMapping("/gofuncMgrPage.xhtml")
	@Request("跳转至功能管理页面")
	public String goFuncMgrPageController() {
		return "/pc/function/FunctionsMgrPage";
	}
	
	/**
	 * 获取功能列表数据。
	 * @author Chrise 2020年12月20日
	 * @param params 查询参数。
	 * @return 功能列表数据。
	 */
	@ResponseBody
	@PostMapping("/getFuncMgrList.xhtml")
	@PassiveRequest(value = "获取功能列表数据")
	public ModelMap getFuncMgrListController(@RequestParam Map<String, Object> params) {
		List<Map<String, Object>> result = this.functionService.getFuncMgrListService(params);
		return super.createModel(true, result);
	}
	
	/**
	 * 跳转至新增/编辑功能页面。
	 * @author Chrise 2020年12月20日
	 * @return 页面路径。
	 */
	@RequestMapping("/goUpdateFuncMgrPage.xhtml")
	@Request("跳转至新增/编辑功能页面")
	public String goUpdateFuncMgrPageController() {
		return "/pc/function/UpdateFunctionsPage";
	}
	
	/**
	 * 获取父级功能数据。
	 * @author Chrise 2020年12月20日
	 * @return 父级功能数据。
	 */
	@ResponseBody
	@RequestMapping("/getParentFuncSelectList.xhtml")
	@PassiveRequest(value = "获取父级功能数据")
	public ModelMap getParentFuncSelectListController() {
		List<Map<String, Object>> result = this.functionService.getParentFuncSelectListService();
		return super.createModel(true, result);
	}
	
	/**
	 * 根据功能数据标识获取对象。
	 * @author Chrise 2020年12月20日
	 * @param entityid 功能数据标识。
	 * @return 功能对象。
	 */
	@ResponseBody
	@RequestMapping("/getFuncObjByFuncid.xhtml")
	@PassiveRequest(value = "根据功能数据标识获取对象")
	public ModelMap getFuncObjByFuncidController(Long entityid) {
		Functions result = this.functionService.getFuncObjByFuncidService(entityid);
		return super.createModel(true, result);
	}
	
	/**
	 * 新增功能对象。
	 * @author Chrise 2020年12月20日
	 * @param data 提交保存的数据。
	 * @return 保存结果。
	 */
	@ResponseBody
	@RequestMapping(value = "/insertOrUpdateFuncObj.xhtml", params = "execute=add")
	@Request("新增功能对象")
	public ModelMap insertFuncObjController(Functions data) {
		Map<String, Object> result = new HashMap<String, Object>();
		this.functionService.insertOrUpdateFuncObjService(data, result);
		return super.createModel(true, result);
	}
	
	/**
	 * 编辑功能对象。
	 * @author Chrise 2020年12月20日
	 * @param data 提交保存的数据。
	 * @return 保存结果。
	 */
	@ResponseBody
	@RequestMapping(value = "/insertOrUpdateFuncObj.xhtml", params = "execute=edit")
	@Request("编辑功能对象")
	public ModelMap updateFuncObjController(Functions data) {
		Map<String, Object> result = new HashMap<String, Object>();
		this.functionService.insertOrUpdateFuncObjService(data, result);
		return super.createModel(true, result);
	}
	
	/**
	 * 删除功能数据。
	 * @author Chrise 2020年12月20日
	 * @param entityid 功能标识。
	 * @return 删除结果。
	 */
	@ResponseBody
	@RequestMapping(value = "/updateEntitystateByFuncid.xhtml", params = "execute=del")
	@Request("删除功能数据")
	public ModelMap executeDeleteController(String entityid) {
		Map<String, Object> result = new HashMap<String, Object>();
		this.functionService.updateEntitystateByFuncidService(entityid, EntityState.INVALID.getValue(), result);
		return super.createModel(true, result);
	}
	
	/**
	 * 回收站执行恢复功能数据。
	 * @author Chrise 2020年12月20日
	 * @param entityid 功能标识。
	 * @return 恢复结果。
	 */
	@ResponseBody
	@RequestMapping(value = "/updateEntitystateByFuncid.xhtml", params = "execute=rest")
	@Request("回收站执行恢复功能数据")
	public ModelMap executeRestoreController(String entityid) {
		Map<String, Object> result = new HashMap<String, Object>();
		this.functionService.updateEntitystateByFuncidService(entityid, EntityState.VALID.getValue(), result);
		return super.createModel(true, result);
	}
	
	/**
	 * 回收站执行删除功能数据。
	 * @author Chrise 2020年12月20日
	 * @param entityid 功能标识。
	 * @return 删除结果。
	 */
	@ResponseBody
	@RequestMapping(value = "/updateEntitystateByFuncid.xhtml", params = "execute=delRecyce")
	@Request("回收站执行删除功能数据")
	public ModelMap executeDelRecyceController(String entityid) {
		Map<String, Object> result = new HashMap<String, Object>();
		this.functionService.updateEntitystateByFuncidService(entityid, EntityState.DELETED.getValue(), result);
		return super.createModel(true, result);
	}
	
	/**
	 * 跳转至功能详情页面
	 * @author Chrise 2020年12月20日
	 * @return 页面路径。
	 */
	@RequestMapping("/goFunctionsDetailPage.xhtml")
	@Request("跳转至功能详情页面")
	public String goFunctionsDetailPageController() {
		return "/pc/function/FunctionsDetailPage";
	}
	
	/**
	 * 查询功能详情数据。
	 * @author Chrise 2020年12月20日
	 * @param entityid 功能标识。
	 * @return 功能详情数据。
	 */
	@ResponseBody
	@RequestMapping("/getFunctionsDetailDataByFuncid.xhtml")
	@PassiveRequest(value = "查询功能详情数据")
	public ModelMap getFunctionsDetailDataByFuncidController(String entityid) {
		Map<String, Object> result = this.functionService.getFunctionsDetailDataByFuncidService(entityid);
		return super.createModel(true, result);
	}
}
